unit Ambiente;

interface
uses
  Classes, Estado, Acao;

type
  TAmbiente = class
    protected
      FEstadoAgente : TEstado;
      FEstados      : TList;
    public
      constructor Create (NumeroDeEstados : Integer);
      destructor Destroy; override;

      function NovoEstado (s : TEstado; a: TAcao) : TEstado; virtual; abstract;
      function Recompensa : Double; virtual; abstract;

      property EstadoAgente : TEstado read FEstadoAgente write FEstadoAgente;

  end;

implementation

uses SysUtils;

{ TAmbiente }

constructor TAmbiente.Create(NumeroDeEstados : Integer);
var
  i : Integer;
  s : TEstado;
begin
  FEstados := TList.Create;

  for i := 0 to NumeroDeEstados -1 do
    begin
      s := TEstado.Create;

      FEstados.Add(s);

    end;

end;



destructor TAmbiente.Destroy;
var
  i : Integer;

  s : TEstado;
begin

  for i := 0 to FEstados.Count-1 do
    begin
      s := FEstados[i];

      if Assigned (s) then
        FreeAndNil(s);
    end;

  if Assigned (FEstados) then
    FreeAndNil(FEstados);

  inherited;

end;

end.
